package com.iwayin.core.dao.user;

import java.util.List;

import com.iwayin.core.dataobject.UserDO;
import com.iwayin.core.vo.SearchVO;

public interface UserDAO {
	/**
	 * 缓存发邮件的人
	 * @param userId
	 * @return
	 */
	public UserDO getEmailReceiver(Long userId);

	public Long addUser(UserDO user);

	public UserDO getUserById(Long userId);
	/**
	 * 根据用户名查询用户
	 * @param loginName
	 * @return
	 */
	public UserDO getUserByLoginName(String loginName);
	/**
	 * 根据昵称查询用户
	 * @param nickname
	 * @return
	 */
	public UserDO getUserByNickName(String nickname);
	/**
	 * 根据邮箱查询用户
	 * @param email
	 * @return
	 */
	public UserDO getUserByEmail(String email);

	public Integer updatePassword(UserDO user);

	/**
	 * @author LiuWenLong
	 * @version 2012-3-5下午8:54:53
	 * @descriptions 粉丝数+1
	 * @param userId
	 */
	void fansCountPlusOne(Long userId);

	/**
	 * @author LiuWenLong
	 * @version 2012-3-5下午8:55:29
	 * @descriptions 粉丝数-1
	 * @param userId
	 */
	void fansCountMinusOne(Long userId);
	
	/**
	 * @author LiuWenLong
	 * @version 2012-3-5下午8:56:42
	 * @descriptions 关注数+1
	 * @param userId
	 */
	void followCountPlusOne(Long userId);
	
	/**
	 * @author LiuWenLong
	 * @version 2012-3-5下午8:56:42
	 * @descriptions 关注数-1
	 * @param userId
	 */
	void followCountMinusOne(Long userId);
	
	/**
	 * @author ZhangLei
	 * 更新用户信息
	 * @return
	 */
	public void updateUserInfo(UserDO user);
	
	/**
	 * @author LiuWenLong
	 * @version 2012-3-7下午8:42:06
	 * @descriptions 问题数+1
	 * @param userId
	 */
	void askCountPlusOne(Long userId);
	/**
	 * 问题数-1
	 * @param userId
	 */
	void askCountminuOne(Long userId);
	/**
	 * like+1
	 * @param userId
	 */
	void likeReceivePlusOne(Long userId);
	
	/**
	 * like+1
	 * @param userId
	 */
	void likeReceiveMinusOne(Long userId);
	/**
	 * 用户列表
	 * @param query
	 * @return
	 */
	public List<UserDO> listUser(UserDO query);
	
	/**
	 * 搜索用户（模糊搜索）
	 * @param query
	 * @return
	 */
	public List<SearchVO> searchUser(SearchVO query);
	/**
	 * 查询用户
	 */
	public List<UserDO> findUsers(List<Long> userIds);
	
	/**
	 * @author ZhangLei 
	 * @descriptions 回答数加1
	 * @param userId
	 */
	
	public void answerCountPlusOne(Long userId);
	
	/**
	 * @author ZhangLei 
	 * @descriptions 查询用户（默认1000）
	 */
	public List<Long> findSystemUsers();

	/**
	 * 更新用户状态
	 * @param user
	 */
	public void updateUserStatus(UserDO user);

	/**
	 * 具有登陆邮箱、已经激活
	 * @return
	 */
	public List<UserDO> findCanSendEmail();
}
